package delphorm.web.aspect;

import java.lang.reflect.Method;

import javax.servlet.http.HttpServletRequest;

import org.springframework.aop.MethodBeforeAdvice;

import delphorm.entite.personne.DroitGroupe;
import delphorm.entite.personne.GroupeCollectif;
import delphorm.entite.personne.Utilisateur;
import delphorm.service.personne.IGroupeCollectif;
import delphorm.service.personne.IPersonne;
import delphorm.web.exception.SecuriteException;


public class VerifierAjouterUtilisateurGroupeCollectif implements MethodBeforeAdvice, Verif {
	IPersonne servicePersonne;
	IGroupeCollectif serviceGroupeCollectif;
	
	public IPersonne getServicePersonne() {
		return servicePersonne;
	}
	public void setServicePersonne(IPersonne servicePersonne) {
		this.servicePersonne = servicePersonne;
	}
	
	public void before(Method method, Object[] arguments, Object target) 
			throws Throwable {
		Object[] args = new Object[3];
		args[0] = ((HttpServletRequest)arguments[0]).getSession().getAttribute("utilisateur");
		
		args[1] = new Long(Long.parseLong((String)((HttpServletRequest)arguments[0]).getParameter("idutilisateur")));
		args[2] = new Long(Long.parseLong((String)((HttpServletRequest)arguments[0]).getParameter("idgroupecollectif")));
		
						 
		if(!doVerif(args))
			throw new SecuriteException("exception.ajouterutilisateurgroupecollectif.pasledroit");
		
	}
	
	public boolean doVerif(Object[] objects) {
		Utilisateur utilisateur = (Utilisateur)objects[0];
				
		//l'utilisateur a le droit Voir tous les utilisateurs
		if(utilisateur.getDroitsGeneraux().getAjouterUtilisateursTousGroupes().booleanValue() == true)
			return true;
		//Ben a le droit ajouterUtilisateurGroupe sur le groupe
		
		//récupère le groupe
		GroupeCollectif groupeCollectif = serviceGroupeCollectif.chercherGroupeParId((Long)objects[2]);
		
		//récupère les droits de Ben pour ce groupe 
		DroitGroupe dg = utilisateur.getDroitGroupeCollectif(groupeCollectif);
		if(dg == null)
			return false;
		else
		{
			if(dg.getAjouterUtilisateurGroupe().booleanValue() == true)
				return true;
			else
				return false;
		}
	}
	public IGroupeCollectif getServiceGroupeCollectif() {
		return serviceGroupeCollectif;
	}
	public void setServiceGroupeCollectif(IGroupeCollectif serviceGroupeCollectif) {
		this.serviceGroupeCollectif = serviceGroupeCollectif;
	}

	

}
